package com.djf.djfpgsql.service;

/**
 * @Author djf
 * @Date 2025/1/10
 * @Version 1.0
 */

import com.baomidou.dynamic.datasource.annotation.DS;
import com.djf.djfpgsql.entity.User;
import com.djf.djfpgsql.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 用户服务 - 展示MySQL和PostgreSQL的核心差异
 */
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    // ==================== 基础操作 ====================
    
    /**
     * 查询MySQL所有用户
     */
    public List<User> listUsersFromMySQL() {
        return userMapper.selectList(null);
    }

    /**
     * 查询PostgreSQL所有用户
     */
    @DS("pgsql")
    public List<User> listUsersFromPGSQL() {
        return userMapper.selectList(null);
    }

    /**
     * 新增用户到MySQL
     */
    public void addUserToMySQL(User user) {
        userMapper.insert(user);
    }

    /**
     * 新增用户到PostgreSQL
     */
    @DS("pgsql")
    public void addUserToPGSQL(User user) {
        userMapper.insert(user);
    }

    // ==================== 展示数据库差异的核心方法 ====================
    
    /**
     * 1. 字符串模糊查询 - MySQL版本
     * 使用 LIKE + CONCAT
     */
    public List<User> searchUsersByNameMySQL(String keyword) {
        return userMapper.searchUsersByNameMySQL(keyword);
    }
    
    /**
     * 1. 字符串模糊查询 - PostgreSQL版本
     * 使用 ILIKE + ||
     */
    @DS("pgsql")
    public List<User> searchUsersByNamePGSQL(String keyword) {
        return userMapper.searchUsersByNamePGSQL(keyword);
    }
    
    /**
     * 2. 日期函数 - MySQL版本
     * 使用 DATE_SUB(NOW(), INTERVAL n DAY)
     */
    public List<User> getRecentUsersMySQL(Integer days) {
        return userMapper.getRecentUsersMySQL(days);
    }
    
    /**
     * 2. 日期函数 - PostgreSQL版本
     * 使用 NOW() - INTERVAL 'n days'
     */
    @DS("pgsql")
    public List<User> getRecentUsersPGSQL(Integer days) {
        return userMapper.getRecentUsersPGSQL(days);
    }
    
    /**
     * 3. JSON字段操作 - MySQL版本
     * 使用 JSON_EXTRACT(profile, '$.city')
     */
    public List<User> findUsersByCityMySQL(String city) {
        return userMapper.findUsersByCityMySQL(city);
    }
    
    /**
     * 3. JSON字段操作 - PostgreSQL版本
     * 使用 profile->>'city'
     */
    @DS("pgsql")
    public List<User> findUsersByCityPGSQL(String city) {
        return userMapper.findUsersByCityPGSQL(city);
    }
    
    /**
     * 4. 布尔值和统计 - MySQL版本
     * 使用 is_active = 1/0
     */
    public Map<String, Object> getUserStatisticsMySQL() {
        return userMapper.getUserStatisticsMySQL();
    }
    
    /**
     * 4. 布尔值和统计 - PostgreSQL版本
     * 使用 is_active = true/false
     */
    @DS("pgsql")
    public Map<String, Object> getUserStatisticsPGSQL() {
        return userMapper.getUserStatisticsPGSQL();
    }
    
    /**
     * 5. 时间戳更新 - MySQL版本
     * 使用 NOW()
     */
    public boolean updateLastLoginMySQL(Long id) {
        return userMapper.updateLastLoginMySQL(id) > 0;
    }
    
    /**
     * 5. 时间戳更新 - PostgreSQL版本
     * 使用 CURRENT_TIMESTAMP
     */
    @DS("pgsql")
    public boolean updateLastLoginPGSQL(Long id) {
        return userMapper.updateLastLoginPGSQL(id) > 0;
    }
    
    /**
     * 6. 排序和限制 - MySQL版本
     */
    public List<User> getTopUsersByBalanceMySQL(Integer limit) {
        return userMapper.getTopUsersByBalanceMySQL(limit);
    }
    
    /**
     * 6. 排序和限制 - PostgreSQL版本
     */
    @DS("pgsql")
    public List<User> getTopUsersByBalancePGSQL(Integer limit) {
        return userMapper.getTopUsersByBalancePGSQL(limit);
    }
}
